/*
 * DIP plugin for Custom IOS.
 *
 * Copyright (C) 2008-2010 Waninkoko, WiiGator.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */


.macro syscall vec_sys
	.long 0xE6000010 + (\vec_sys<<5)
	bx lr
.endm


/*
 * IOS syscalls
 */
	.code 32
	.global os_thread_create
os_thread_create:
	syscall 0x0

	.code 32
	.global os_thread_joint
os_thread_joint:
	syscall 0x1

	.code 32
	.global os_thread_cancel
os_thread_cancel:
	syscall 0x2

	.code 32
	.global os_get_thread_id
os_get_thread_id:
	syscall 0x3

	.code 32
	.global os_get_parent_thread_id
os_get_parent_thread_id:
	syscall 0x4

	.code 32
	.global os_thread_continue
os_thread_continue:
	syscall 0x5

	.code 32
	.global os_thread_stop
os_thread_stop:
	syscall 0x6

	.code 32
	.global os_thread_yield
os_thread_yiel:
	syscall 0x7

	.code 32
	.global os_thread_get_priority 
os_thread_get_priority :
	syscall 0x8

	.code 32
	.global os_thread_set_priority
os_thread_set_priority:
	syscall 0x9

	.code 32
	.global os_message_queue_create
os_message_queue_create:
	syscall 0xa

	.code 32
	.global os_message_queue_destroy
os_message_queue_destroy:
	syscall 0xb

	.code 32
	.global os_message_queue_send 
os_message_queue_send:
	syscall 0xc

	.code 32
	.global os_message_queue_send_now
os_message_queue_send_now:
	syscall 0xd

	.code 32
	.global os_message_queue_receive
os_message_queue_receive:
	syscall 0xe

	.code 32
	.global os_register_event_handler
os_register_event_handler:
	syscall 0xf

	.code 32
	.global os_unregister_event_handler 
os_unregister_event_handler:
	syscall 0x10

	.code 32
	.global os_create_timer
os_create_timer:
	syscall 0x11

	.code 32
	.global os_restart_timer 
os_restart_timer:
	syscall 0x12

	.code 32
	.global os_stop_timer  
os_stop_timer:
	syscall 0x13

	.code 32
	.global os_destroy_timer 
os_destroy_timer:
	syscall 0x14

	.code 32
	.global os_timer_now
os_timer_now:
	syscall 0x15

	.code 32
	.global os_heap_create
os_heap_create:
	syscall 0x16

	.code 32
	.global os_heap_destroy
os_heap_destroy:
	syscall 0x17

	.code 32
	.global os_heap_alloc
os_heap_alloc:
	syscall 0x18

	.code 32
	.global os_heap_alloc_aligned
os_heap_alloc_aligned:
	syscall 0x19

	.code 32
	.global os_heap_free
os_heap_free:
	syscall 0x1a

	.code 32
	.global os_device_register
os_device_register:
	syscall 0x1b
	
	.code 32
	.global os_open
os_open:
	syscall 0x1c

	.code 32
	.global os_close
os_close:
	syscall 0x1d

	.code 32
	.global os_read
os_read:
	syscall 0x1e

	.code 32
	.global os_write
os_write:
	syscall 0x1f

	.code 32
	.global os_seek
os_seek:
	syscall 0x20

	.code 32
	.global os_ioctl
os_ioctl:
	syscall 0x21

	.code 32
	.global os_ioctlv
os_ioctlv:
	syscall 0x22

	.code 32
	.global os_open_async
os_open_async:
	syscall 0x23

	.code 32
	.global os_close_async
os_close_async:
	syscall 0x24

	.code 32
	.global os_read_async
os_read_async:
	syscall 0x25

	.code 32
	.global os_write_async
os_write_async:
	syscall 0x26

	.code 32
	.global os_seek_async
os_seek_async:
	syscall 0x27

	.code 32
	.global os_ioctl_async
os_ioctl_async:
	syscall 0x28

	.code 32
	.global os_ioctlv_async
os_ioctlv_async:
	syscall 0x29

	.code 32
	.global os_message_queue_ack
os_message_queue_ack:
	syscall 0x2a

	.code 32
	.global os_software_IRQ
os_software_IRQ:
	syscall 0x34

	.code 32
	.global os_sync_before_read
os_sync_before_read:
	syscall 0x3f

	.code 32
	.global os_sync_after_write
os_sync_after_write:
	syscall 0x40

	.code 32
	.global os_virt_to_phys
os_virt_to_phys:
	syscall 0x4f

	.code 32
	.global os_syscall_50
os_syscall_50:
	syscall 0x50


/*
 * ARM syscalls
 */
	.code 32
	.global write
write:
	mov	r2, lr
	adds	r1, r0, #0
	movs	r0, #4
	svc	0xab
	bx	r2
